#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <time.h>
#include <math.h>
#include <omp.h>
#include <mpi.h>

#define BLOCKSIZE 65000     //tamanho do bloco necessario para ler o arquivo
#define AVG_SIZE_WORD 2 	//tamanho medio estimada para palavra
#define MAX_SIZE_WORD 100    //tamanho maximo da palavra
#define MAX_TRIES 100000 	//numero de tentativas por iteracao de geracao de palavras

typedef struct {
    char *content;  //todo o conteudo do arquivo
    unsigned long int size;     //tamanho do arquivo
    char **words;   //matriz que armazena todas as palavras do arquivo
    unsigned long amount_words;     //quantidade total de palavras do arquivo
    unsigned long AVG_BYTES_PER_PROC;   //quantidade media de bytes por no
    unsigned long AVG_WORDS_PER_PROC;   //quantidade media de palavras por no
    int rest;   //se sobrou alguma linha da matriz A da relacao amount_words/numero_de_nos, entao guarda nessa variavel
    unsigned long int aim;	//numero de palavras correspondente a porcentagem desejada
} FileStruct;

FileStruct *file;

short int ReadFile(char *);     //le todo o arquivo e armazena na memoria

short int AllocateData();       //armazena todas as palavras do arquivo

void SetParameters(int, double);        //seta parametros importantes da estrutura FileStruct

int GetAmountBytes(void);       //informa a quantidade de bytes para um determinado no

unsigned long int GetWords(unsigned long int, unsigned long int, char **);   //aloca na matriz passada as palavras referente a aquele no

void ShowElapsedTime(struct timeval *, struct timeval *); //medir o tempo

int RandomWord(int Tries, int amtWords, char **mtxWord); 	//geracao de palavras aleatorias
